1. Field of the Invention
The invention relates to client/server architecture applications and in particular to Web applications where server resources are allocated according to customer/vendor relation parameters to thereby provide a quality-of-service aspect to allocation of server resources.
2. Discussion of Related Art
It is generally known in a client/server distributed computing applications that a single server process provides services for multiple requesting client processes. In the context of Web services on the Internet, a single Web server process services requests from a potentially large number of Web browser client processes. Simple client requests of a Web server process involve retrieval and return of an HTML page (a “Web page”) identified by the universal resource locator (“URL”) provided in the client request. Such simple requests are often handled directly by a single thread of the Web server process and involve little more than locating the requests Web page (the files identified by the URL) and returning the data contained therein.
Some Web client requests involve more complex operations such manipulation of information stored in a database associated with the Web server. Such complex requests may involve more computational resources and latency delays than may be appropriate for a single threaded server process. For such complex requests it is common for a Web server process to spawn (also referred to as “fork”) a child process to service a specific, complex Web browser client request. Such processes are often referred to as “cgi-bin” processes. These cgi-bin processes perform additional computational services on behalf of the requesting Web browser client.
When cgi-bin processes perform significant computational services such as database manipulation, a large number of such processes may share resources of a single computing node. Each process operating on behalf of a particular Web browser client process therefore may share limited computational resources of the underlying computing node with other cgi-bin processes operating on behalf of other Web browser client processes.
Operating system software operating on most modern computational nodes include features to schedule allocation of resources of the computing node such as allocations of CPU processing time among the multiple processes. In general, multiple processes sharing such a computing node would share the computing resources on an equal priority basis. As is presently practiced in the art, each cgi-bin process operating on behalf of a corresponding requesting Web browser client process would receive essentially equal treatment by the underlying computing node on which the plurality of such processes are operating.
It is also common in Internet Web applications that customers of a service provider may pay different fees corresponding to varying levels of service. For example, a high-priority or high-volume customer may pay additional fees for enhanced responsiveness to their Web client inquiries directed to the service provider. However, when all cgi-bin processes are treated essentially equal as measured by allocation of scarce computing resources, the high-priority or high-volume customer may receive an essentially equal allocation of computing resources for processing of their request as compared with a lower priority or lower volume customer.
It is generally known in computing system architectures that scheduling algorithms within an operating system may modify the allocation of computing resources to particular processes based on a number of parameters. For example, it is known for operating system scheduling algorithms to allocate processor time to different processes based on their respective historical utilization of the CPU. Scheduling algorithms may periodically modify the allocation of CPU time among the various competing processes. For example, processes that utilize significant CPU time may be scheduled for larger blocks of CPU time in subsequent scheduling cycles. Such scheduling algorithms are often referred to as adaptive are dynamic.
Though such adaptive or dynamic scheduling algorithms are known generally in operating systems, it remains a problem to associate allocation of computing resources to particular processes based on parameters associated with the nature of the customer/vendor relationship. In other words, it remains a problem to allocate computing resources of a server node such that high-priority or high-volume valued customers receive a more significant allocation of computing resources than low priority, low volume, lesser valued customers.
In addition, some operating system APIs to spawn new child processes (i.e., a UNIX fork API function) allow the invoking process to supply a priority value for CPU time allocation among the several competing processes. In this manner the Web server process could be modified to adjust the priority assigned to each cgi-bin process as it is spawned to adapt the CPU utilization priority in accordance with the customer/vendor relationship parameter value. However, such a technique would require that the Web server process be modified to determine an appropriate priority level and to supply the determined priority level to the invocation (spawning) of each cgi-bin child process. Modification of the Web server process is not an option in all computing enterprises. Rather, it is common for the enterprise to utilize standard, packaged Web server processes where such modifications are not possible.
It is evident on the above discussion that a need exists for improved to utilization of scheduling techniques to map allocation of computing resources in a manner that correlates to defined levels of priority in the customer/vendor relationship. More specifically, a need exists for improved allocation of resources for Web services and associated cgi-bin processes spawned thereby to map the resource allocation to customer quality-of-service requirements.